import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-08-09
 * Time: 11:45
 */
public class MyStack {
    //声明一个数组引用
    public int[] elem;
    //usedsize 既可以用来记录当前栈里的元素 也用来表示当前栈里可以存放的位置下标
    public int usedsize;
    //数组初始化容量
    public static  final  int DEFAULT_CAPACITY = 4;
    //构造方法 初始化数组
    public MyStack(){
        elem = new int[DEFAULT_CAPACITY];
    }

    //压栈
    public void push(int data){
        if(isFull()){
            elem = Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedsize++] = data;
    }
    //判满
    private boolean isFull(){
//       if( usedsize==elem.length){
//           return true;
//       }else
//       return false;
        return usedsize==elem.length;
    }

    //出栈
    public int pop(){
        //判空
        if (isEmpty()){
            throw new EmptyStackException("栈为空了!");
        }
        int val = elem[usedsize-1];
        usedsize--;
        return val;
    }
//判空
    public boolean isEmpty(){
        return usedsize == 0;
    }
    //获取栈顶元素
    public int peek(){
        //判空
        if (isEmpty()){
            throw new EmptyStackException("栈为空了!");
        }
        int val = elem[usedsize-1];
        return val;
    }
    //search 查找元素的下标位置
    public int search(int data){
        int index = 1;
        for (int i = usedsize-1; i >= 0; i--) {
            if(elem[i] == data ){
                return index;
            }
            index++;
        }
        return -1;
    }
    //size 当前栈里元素个数
    public int size(){
        return usedsize;
    }
}
